package beans;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import beans.exceptions.NotConnectedException;

import dao.EntityAlreadyExistsException;
import dao.InexistantEntityException;
import entities.Client;

@ManagedBean
@RequestScoped
public class ClientBean {
    
    @ManagedProperty(value = "#{mainBean}")
    private MainBean mainBean;
    
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    
    //nécessaire uniquement pour la modification
    //ne fonctionne pas avec <h:commandButton action="#{clientBean.modifierClient(client.id)}"> et modifierClient(Integer)
    @ManagedProperty("#{param.idClient}")
    private Integer id;
    
    private String nom;

    private String prenom;
   
    //marche en combinaison avec le <f:setPropertyActionListener et supprimerClient sans paramètre
    /*private Integer idClient;
    public void setIdClient(Integer idClient) {
        this.idClient = idClient;
    }*/
    
    public void setId(Integer id) {
        this.id = id;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }
    
    public Integer getId() {
        return id;
    }
    
    //nécessaire car sinon : The class 'beans.ClientAction' does not have a readable property 'nom'.
    public String getNom() {
        return nom;
    }

    public String getPrenom() {
        return prenom;
    }
    
    public void setMainBean(MainBean mainBean) {
        this.mainBean = mainBean;
    }
    
    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    
    public List<Client> getClients() {
        
        return (List<Client>) mainBean.getGestionnaire().getAll(Client.class);
        
    }
    
    public void nouveauClient()
    {
        try
        {
            mainBean.getGestionnaire().creerClient(nom, prenom);
            mainBean.setMessage("Le client a été correctement créé.");
            nom = "";
            prenom = "";
            
        } catch (EntityAlreadyExistsException ex) {
            mainBean.setMessage(ex.toString());
        }
        
        mainBean.setPage("creerClientForm");
        
        //BeanFunctions.montrerPrincipal(mainBean);
    }
    
    /**
     * Préparation de modifierClientForm.xhtml avec les données du client à modifier
     * @param idClient
     */
    public void modifierClientForm(Integer idClient)
    {
        try
        {
            Client client = (Client) mainBean.getGestionnaire().get(Client.class, idClient);
            id = client.getId();
            nom = client.getNom();
            prenom = client.getPrenom();
            mainBean.setPage("modifierClientForm");
        }
        catch(InexistantEntityException ex)
        {
            mainBean.setMessage(ex.toString());
        }
    }
    
    public void modifierClient()
    {
        try
        {
            mainBean.getGestionnaire().modifierClient(id, nom, prenom);
            mainBean.setMessage("Le client " + id + " a été correctement modifié.");
            mainBean.setPage("listeClients");
        }
        catch(InexistantEntityException ex)
        {
            mainBean.setMessage(ex.toString());
        }   
    }
    
    public void supprimerClient(Integer idClient)
    {
        if(idClient != null)
        {
            try 
            {
                try
                {
                    //Déconnecter le client s'il est celui qu'on veut supprimer
                    if(idClient == sessionBean.getSessionClientId())
                        sessionBean.deconnexion();

                } catch (NotConnectedException ex) {
                    //ne rien faire
                }
                
                mainBean.getGestionnaire().supprimerClient(idClient);
                mainBean.setMessage("Le client " + idClient + " a été correctement supprimé.");

            } catch (InexistantEntityException ex) {
                mainBean.setMessage(ex.toString());
            }
        }
        else
            mainBean.setMessage("idClient est null");
        
        mainBean.setPage("listeClients");
        
        //BeanFunctions.montrerPrincipal(mainBean);        
    }

}
